solid principles java interview questions